package com.dc.refactoring._1_重新组织函数._6_SplitTemporaryVariable;

/**
 * Description: 分解临时变量
 * @author: gdc
 * @date: 2020/11/13
 * @version 1.0
 */
public class Test {
    /**
     * 第一次的力
     */
    double primaryForce = 5.0;
    /**
     * 第二次的力
     */
    double secondaryForce = 8.0;
    /**
     * 物体重量
     */
    int mass = 5;
    /**
     * 延迟时间
     */
    int delay = 1;


    /**
     * 下面计算了一个苏格兰布丁运动的距离。
     * 在起点处，静止的苏格兰布丁会受到一个初始力的作用开始运动。
     * 一段时间后，第二个力作用于布丁，让它再次加速度。
     * 根据牛顿定律，可以这样计算布丁运动的距离：
     *
     * 科普时间：如果以m表示物体的质量，以g表示重力加速度，重力G可表示为G=mg
     *
     * @param time          运动时间
     * @return              运行的距离
     */
    public double getDistinctTravelledOld(int time) {
        double result;

        // 第一次加速度
        double acc = primaryForce / mass;
        int primaryTime = Math.min(time, delay);
        result = primaryTime * primaryTime * 0.5 * acc;

        int secondaryTime = time - delay;
        if (secondaryTime > 0) {
            double primaryVal = acc * delay;

            // 第二次加速度
            acc = (primaryForce + secondaryForce) / mass;
            result += primaryVal * secondaryTime + primaryTime * primaryTime * 0.5 * acc;
        }
        return result;
    }

    public double getDistinctTravelledNew(int time) {
        double result;

        // 第一次加速度
        final double acc = primaryForce / mass;
        int primaryTime = Math.min(time, delay);
        result = primaryTime * primaryTime * 0.5 * acc;
        int secondaryTime = time - delay;
        if (secondaryTime > 0) {
            double primaryVal = acc * delay;

            // 第二次加速度
            final double secondaryAcc = (primaryForce + secondaryForce) / mass;
            result += primaryVal * secondaryTime + primaryTime * primaryTime * 0.5 * secondaryAcc;
        }
        return result;
    }
}
